\chapter{Taxonomia dos Ataques de negação de serviço e mecanismos de defesa}

Esse capítulo pretende mostrar os vários tipos de ataques de negação de serviço; não mostrando individualmente os ataques, mas,  a sua classificação e a dos mecanismos de defesa atuais contra esses ataques. Este capítulo não é essencial para o entendimento dos demais capítulos, mas é vital para um bom entendimento e aprofundamento nos DoS (ataques de negação de serviço) e consequentemente essencial para a área de segurança, que é o foco principal desse documento.

A segurança, não só de redes, mas em aspecto geral consiste em prevenir, mitigar e solucionar possíveis ameaças. Todos esses pontos têm em comum o fato de necessitarem de conhecimento prévio. Não há como prevenir sem saber o quê há de ser prevenido, não há como diminuir os estragos sem entender o que está acontecendo e quais são os estragos, não há como garantir uma solução imediata a algo que nunca foi visto antes. Conhecimento é sempre o primeiro passo para novas soluções.

\section{Taxonomia dos DDoS}
Um DoS pode ser classificado de várias formas, desde a confecção até o estrago causado. Nessa seção serão abordadas várias classificações dizendo respeito principalmente ao funcionamento do DoS em si~\cite{taxonomy} ~\cite{stateoftheart}.
\subsection{Grau de automação}
Como falado anteriormente os DDoS(ataque de negação de serviço distribuído) usam várias máquinas para causar a negação de serviço. Essas máquinas quase sempre são invadidas pelo atacante~\cite{stateoftheart}. A primeira classificação fala sobre isso, o grau de automação dessa infecção. Os primeiros DDoS foram inteiramente manuais, o atacante escaneava por computadores com vulnerabilidades um por um, os infectava usando da vulnerabilidade e instalava o código do ataque manualmente.

Logo depois surgiram ataques semi-automáticos, nesses ataques são implementados hierarquias de mestre e escravo, onde um computador infectado se torna o mestre, infectando e dando ordens para os demais. Nessa classificação a infecção das máquinas e a instalação do código de ataque são automatizadas, porém a ordem de ataque é manual. O atacante necessita avisar ao mestre o tipo do ataque, a duração, o início e a vítima, só então o mestre começa o ataque dando a ordem a todos os escravos.

Por último, há os ataques completamente automatizados, esses ataques possuem a fase de recrutamento, infecção e instalação do código de ataque automáticas, além das informações todas do ataque já no código de ataque. Desta forma, evitando comunicação do atacante com as máquinas infectadas, a participação do atacante se resume a executar alguns comandos e esperar. Esse tipo de ataque geralmente tem um único uso, já que as informações do alvo e do ataque estão dentro do código. Todavia, esse tipo de ataque deixa vulnerabilidades abertas nas máquinas infectadas facilitando futuros ataques~\cite{taxonomy}.

\subsection{Comunicação}
Em todos os ataques semi-automáticos são necessários algum tipo de comunição entre o atacante e as máquinas infectadas ou entre as máquinas infectadas entre si. E a partir disso podem ser classificados em: comunicação direta e indireta.

Na comunicação direta, as máquinas infectadas precisam se comunicar entre si, e para isso o endereço IP delas é colocado diretamente no código, assim possibilitando a comunicação pela rede. Essa estratégia é vulnerável, pois se uma máquina for revelada obtêm-se o endereço de todas as demais máquinas. Além disso, como a máquina infectada deve possuir uma porta aberta para a comunicação com as outras, é possível achá-la usando escaneadores de rede~\cite{taxonomy}.

A comunicação indireta usa sempre algum tipo de mecanismo de comunicação já existente, algum tempo atrás DDoS usavam canais do IRC~\cite{irc} para se comunicar e estabelecer os dados do ataque (hoje em dia existem vários outros serviços de comunicação), uma grande vantagem desse método é a anonimidade dada pelo canal, além disso, o fluxo é extremamente difícil de distinguir de um fluxo legítimo de mensagens. Outra vantagem é em caso da descoberta de umas das máquinas infectadas, a informação revelada é escassa e a investigação nesse caso se torna difícil devido a políticas de privacidade e leis internacionais.

\subsection{Varredura de vítimas}
Como já mencionado, os DDoS primeiro precisam recrutar máquinas infectadas e instalar o código de ataque antes de começar o ataque em si. Os DDoS semi-automáticos e automáticos possuem mecanismos automatizados de varredura, essa varredura serve para achar vítimas com vulnerabilidades e infectá-las, popularmente são usados \emph{trojans} e \emph{worms}. Existem inúmeros métodos de se fazer tais varreduras e as mesmas são bem comuns na internet. Análises mostram que milhões de varreduras e \emph{trojans} ocorrem na internet diariamente~\cite{trojan}. Analisar esses padrões de varredura podem revelar um futuro ataque e evitar danos.

As varreduras podem ser aleatórias, por rede local, por lista e por contatos~\cite{taxonomy}. A varredura aleatória faz com que cada máquina infectada busque por máquinas usando endereços aleatórios, cada uma delas usa uma semente diferente para evitar uma varredura sobre os mesmos endereços. A varredura por rede local tenta buscar todas as máquinas da subrede para então avançar para uma próxima subrede. 

A busca por lista é bem diversificada, a idéia principal consiste em uma lista com os endereços a serem varridos. As diversas máquinas infectadas podem assumir posições diferentes na lista usando índices e podem fazer pulos quando encontrarem um endereço já percorrido ou uma máquina já infectada. Além disso podem ser usados diversos procedimentos para evitar colisões na lista e varrer um maior número de endereços. A última varredura usa dos contatos de uma máquina infectada para infectar as demais. Nesse caso, as vítimas são encontradas através de emails, redes sociais e outros métodos de comunicação, \emph{worms} e \emph{trojans} são, então, transmitidos a esses contatos, infectando suas máquinas.

Todas as varreduras citadas ainda podem ser horizontais, verticais, coordenadas e furtivas. As varreduras furtivas são feitas devagar e em parcelas para evitar a sua detecção. As horizontais buscam por apenas uma vulnerabilidade específica em cada máquina, clássica para o uso de \emph{worms}, já as verticais procuram por uma grande quantidade de vulnerabilidades em cada máquina, para só assim avançar para a próxima. Uma varredura coordenada geralmente é usada junto com a varredura por rede local, a mesma tenta combinar as varreduras horizontais e verticais na mesma rede local para aumentar a efetividade da busca.

\subsection{Vulnerabilidades exploradas pelos DDoS}
Os ataques de negação de serviço em si tentam esgotar os recursos da vítima para que ela não possa fornecê-los a usuários legítimos. Os ataques são, então, classificados em duas categorias baseadas em como seus serviços serão negados: volumétricos(inundação e amplificação) e de conteúdo.

Os ataques volumétricos geram uma enorme quantidade de pacotes, que serão enviados à vítima. A vítima fica sobrecarregada e com sua banda saturada, ou no caso de servidores, todo o processamento e(ou) conexões disponíveis ficam sobrecarregados(podendo haver pane ou reinicialização pelo servidor). Um tipo de ataque volumétrico é o de inundação(do inglês \emph{flooding}), esse ataque consiste de um grande número de máquinas infectadas se conectando à vítima e requisitando serviços. As máquinas infectadas costumam requisitar tarefas um pouco mais trabalhosas à vítima, assemelhando-se a usuários legítimos, mas o potencial desse método é a quantidade.

Um outro tipo de ataque volumétrico é o ataque de amplificação~\cite{stateoftheart}. Esse tipo de ataque consiste em gerar uma enorme quantidade de pacotes para a vítima, mas necessitando de menos máquinas. O ataque consiste de usar algum tipo de ferramenta ou vulnerabilidade para amplificar a quantidade de tráfego gerado e direcioná-lo à vítima. Um bom exemplo desse tipo de ataque é o \emph{smurf}~\cite{smurf}. O ataque \emph{smurf} consiste em enviar vários pings(requisições ICMP que necessitam de respostas) para uma subrede em seu endereço de broadcast, porém esses pings possuem o seu endereço de remetente forjado(\emph{ip spoofing}\footnote{O \emph{ip spoofing} é uma técnica usado por atacantes que consiste em mudar o campo de remetente dos pacotes IP por um outro qualquer, dependendo da finalidade.}), todas as máquinas da subrede respondem esse ping para o endereço forjado, a vítima. Um único pacote enviado gera vários pacotes de resposta direcionados a vítima, amplificando o dano que cada máquina atacante causaria à vítima. 

O problema do ataque \emph{smurf} foi mitigado evitando-se que redes pela Internet funcionassem como amplificadores~\cite{smurfDef},
para isso desabilita-se a propagação de pacotes de controle (\emph{pings}) em \emph{broadcast} nos nós da subrede.
Um  outro ataque volumétrico de amplificação mais atual consiste de usar servidores de DNS(\emph{Domain Name System}
\footnote{DNS é um serviço usado na internet inteira onde enderços com letras são convertidos para seu correspondente endereço IP. Um endereço hipotético \emph{www.hipotese.com} seria subistituído por um endereço IP hipotético \emph{189.100.100.100} .})
para amplificar a quantidade de tráfego e direcioná-lo~\cite{dnsamp} assim como o \emph{smurf}. A figura ~\ref{fig:smurf} a seguir exemplifica melhor os ataques de amplificação.

\begin{figure}[H]
\centerline{\includegraphics[scale=0.4]{figuras/smurf.jpg}}
\caption{Imagem descrevendo o funcionamento de um ataque \emph{smurf}~\cite{smurfDef}(adaptada para o português).}
\label{fig:smurf}
\end{figure}

Esses ataques ressaltam que mesmo uma rede protegida pode se tornar insegura, pois outra rede não segura pode amplificar ou causar grandes problemas. A segurança de redes, nesse caso, tem um enorme empecilho, a falta de segurança de alguns pode comprometer a segurança de todos, e a internet é um vasto emaranhado onde nem todos estão bem protegidos.

Os DDoS também podem ser de conteúdo(também chamado vulnerabilidade), esses ataques, no geral, enviam um número alto de pacotes mas não são caracterizados por isso. Essa categoria de ataque explora de falhas de implementação, características ruins e mau uso de protocolos e aplicações pela vítima para consumir seus recursos ou causar uma pane. Como citado no capítulo anterior, o \emph{slowloris} é um ataque de conteúdo que usa de uma vulnerabilidade em como um servidor web trata requisiões HTTP para ocupar todas as suas conexões. 

Um outro exemplo bem popular de ataque de conteúdo é o TCP SYN, esse ataque é bem parecido porém em vez de explorar falhas no tratamento de aplicações(no caso HTTP) ele explora falhas em cima do protocolo TCP. No protocolo TCP, para o cliente se conectar ao servidor ele necessita mandar um pacote de início, receber um pacote de início do servidor e então confirmar, três pacotes no total (\emph{handshake}). O ataque consiste em enviar o primeiro pacote, receber o pacote do servidor e nunca mandar a confirmação. Fazendo isso para todas as conexões do servidor, ele ficará com todas elas ocupadas esperando confirmações que nunca chegaram.

O objetivo desse trabalho de conclusão de curso, como já mencionado, inclue a implementação de um desses DDoS de conteúdo voltado totalmente para a área didática, com o único intuito de ajudar a todos os interessados a criar novos mecanismos de defesa para que esse ataque possa ser evitado antes mesmo de se tornar uma ameaça de verdade.


\subsection{Dinâmicas do fluxo de ataque} 
Durante os ataques, cada máquina infectada manda fluxos de dados à vítima, direta ou indiretamente. Esse fluxo de dados pode ser constante ou variar com o tempo, dependendo da intenção do atacante. A grande maioria dos ataques costuma mandar um fluxo constante de dados e sempre o máximo possível, para garantir uma negação de serviço completa e mais eficiente. Um fluxo constante de ataque, entretanto, revela facilmente o ataque~\cite{stateoftheart}.

Ataques com fluxo variável são realizados para evitar ou atrasar sua detecção. Alguns ataques costumam aumentar gradualmente o seu fluxo para ir degenerando a vítima aos poucos, evitando detecção. Outros ataques involvem fluxos intermitentes sincronizados entre todas as máquinas infectadas, tal estratégia permite  períodos espaçados de negação de serviço, que podem se adaptar a reação da vítima e a mecanismos de defesa. Ataques com fluxo variável também podem dividir todas as máquinas infectadas em subgrupos, esses subgrupos ficam períodos intermitentes ativos ou inativos, assim deixando bem difícil a detecção por parte da vítima~\cite{taxonomy}.

\subsection{Tipo de vítima e impactos}
Uma vítima de DDoS pode sofrer o ataque de diferentes formas, o dano pode ocorrer devido a uma vulnerabilidade em alguma das camadas do servidor ou em sua própria infraestrutura.  Dependendo do tipo de dano causado e qual parte da vítima foi afetada o ataque pode ser caracterizado de maneiras diferentes.~\cite{taxonomy}.

Vítimas podem ser classificadas por sofrerem problemas em suas aplicações, podendo ter todas as suas outras funcionalidades ativas, mas tendo a aplicação interrompida ou ocupada indeterminadamente, a maioria dos ataques que afetam aplicações usam de vulnerabilidades e geralmente possuem tráfego bem similar a usuários legítimos. Um outro tipo de ataque afeta o \emph{host} diretamente , afetando a comunicação de usuários legítimos, ocupando todas as conexões, interrompendo seus mecanismos de comunicação ou fazendo a vítima ter falhas críticas e reiniciar~\cite{taxonomy}.  Um exemplo desse ataque é o TCP SYN citado em subseções anteriores~\cite{stateoftheart}.

Existem, também, aqueles ataques contra recursos da vítima, geralmente visando recursos vitais. Entre eles podemos destacar servidores de DNS específicos, roteadores, e nós com gargalos. Esses ataques podem ser evitados usando uma topologia de rede robusta e aumentando a quantidade de recursos críticos. Como exemplo, ataques voltados diretamente à redes são caracterizados por consumir toda a banda disponível do alvo para que a disposição física do canal não possa permitir o envio de pacotes legítimos.

Por último, o ataque de infraestrutura que visa indisponibilizar serviços essenciais ao funcionamento da internet e consequentemente à vítima. Entre as infraestruturas alvo desses ataques encontram-se servidores de DNS, roteadores de larga escala, protocolos de roteamento e servidores de certificados. Ataques dessa intensidade são devastadores e só podem ser resolvidos juntando-se ações coordenadas de múltiplos agentes da internet.

Além dessa categoria de parte afetada da vítima, podemos caracterizar ataques no grau de impacto causado. Nessa categoria encontram-se ataques disruptivos e degradantes. O objetivo dos ataques degradantes é consumir parcialmente os recursos da vítima, diferentemente de um ataque disruptivo, esse ataque pode permanecer indetectado por um bom tempo. Mesmo parecendo um ataque mais fraco, os ataques degradantes podem ocasionar lentidão e inacessibilidade à alguns consumidores legítimos. No caso 
de empresas, pode chegar a influenciar a escolha de um cliente sobre um possível concorrente ou até mesmo causar uma queda no lucro devido a alguns comsumidores não conseguirem conexão com a empresa.

Os ataques disruptivos afetam totalmente os recursos da vítima, os tornando totalmente inacessíveis a úsuarios legítimos. Grande maioria absoluta dos ataques reportados até hoje são dessa categoria~\cite{taxonomy}. Dentre esses ataques que minam todos os recursos da vítima podemos citar ataques que só afetam a vítima no período ativo do ataque (na qual a vítima se recupera totalmente assim que o ataque cessa), ataques sem recuperação (onde há necessidade de reparação de \emph{hardware}) e ataques que necessitam de intervenção humana (reiniciar, reconfigurar e etc). Os ataques disruptivos sem recuperação são teoricamente possíveis porém nunca houveram provas tangíveis de seu uso~\cite{taxonomy}.

\section{Classificação dos mecanismos de defesa}

Os mecanismos de defesa contra DDoS e DoS atuais podem ser classificados baseados em sua reação ao ataque, podendo ser preventivos e reativos~\cite{stateoftheart}. Os mecanismos preventivos são baseados em uma reação pré-ataque, a idéia geral desses mecanismos é evitar que os ataques comecem, assim evitando o ataque por completo ou garantindo que a vítima consiga suportar o ataque e mantenha a disponibilidade dos seu serviços. Por outro lado, os mecanismos reativos tentam aliviar o impacto de ataques à vítima. Eles se concentram em detectar e reagir ao ataque , assim mitigando as consequências do ataque. Um bom mecanismo reativo tem que se preocupar com uma boa detecção, evitando falsos positivos e uma boa reação garantindo a disponibilidade dos serviços oferecidos.

\subsection{Mecanismos de defesa preventivos}
Defesas preventivas modificam sistemas e protocolos da internet para eliminar a tentativa de possíveis ataques, entretanto, nenhum mecanismo de defesa preventivo é totalmente eficiente, pois a implantação global desses recursos não pode ser garantida. Tal desvantagem ainda não impede a implantação desses mecanismos, pois mesmo não sendo totalmente garantido, a frequência e o impacto dos ataques costuma diminuir significativamente.

Um dos tipos de defesa preventiva modifica sistemas em si para impedir que violações desses sistemas desencadeiem um DDoS. Essa defesa tem como principal objetivo impedir que atacantes usem de bugs e falhas de segurança para infectar sistemas. Uma infecção em um sistema pode obrigá-lo a se tornar um novo atacante que será usado em um DDoS, muitas vezes até passando despercebido. O mérito desse tipo de defesa está em impedir que um atacante infecte máquinas, assim perdendo seu \lq{}exército\rq{}. Entre os exemplos dessa defesa se encontram sistemas de monitoramento de máquinas, aplicações que possem atualizações periódicas de segurança, firewalls, sistemas de prevenção de intrusões e defesas contra worms.

 Um outro tipo de defesa preventiva é a segurança de protocolos. Alguns ataques costumam explorar o mau funcionamento e implementação de protocolos para exaurir os recursos da vítima, assim como o TCP SYN e o slowloris. Um bom exemplo é o \emph{ipspoofing}, como os protocolos de roteamento de pacotes não fazem validação de endereços, atacantes forjam os endereços de origem dos pacotes para não serem descobertos ou causarem ataques, uma melhor implementação com validação de endereços evitaria tal problema. Geralmente, defesas preventivas na segurança de protocolos consistem de adaptações nos protocolos e publicações de \emph{designs} de implementações seguras.

Um DDoS pode ser prevenido consertando-se falhas de segurança em sistemas e protocolos, mas também pode ser evitado garantindo que serviços estejam semprem disponíveis, inclusive durante um ataque. Um servidor pode muito bem adquirir maior abundância de recursos garantindo maior disponibilidade para clientes e exigindo uma quantidade de atacantes muito maior para um ataque efetivo. Todavia, essa solução envolve um custo monetário elevado, mesmo se provando eficiente~\cite{taxonomy}. Outra maneira de garantir recursos é usar políticas de divisão de recursos e justiça, usar políticas de escalonamento de recursos garante que todos os usuários inclusive não legítimos tenham acesso ao recurso( mesmo que limitado durante um ataque). 

\subsection{Mecanismos de defesa reativos}

Os mecanismos de defesa reativos entram em destaque na hora do ataque em si. Esses mecanismos detectam um ataque em andamento e usam de diversas estratégias para aliviar o dano causado pelo ataque, deixando a vítima operante. Nessa categoria de mecanismos, uma detecção boa(baixos falso positivos) e rápida é fundamental, pois gera uma janela maior de resposta.

A primeira etapa de uma defesa reativa é detectar o ataque, isso pode ser feito através de detecção de padrões, detecção de anomalias e mecanismos externos de detecção. A detecção por padrões já vem fazendo sucesso na história dos antivírus, ela consiste de um banco de dados com todas os padrões de ataques conhecidos e o monitoramento de todas as comunicações para detecção desses padrões. A grande vantagem desse mecanismo de detecção é a facilidade da detecção e a ausência de falsos positivos~\cite{taxonomy}, no entanto, pequenas variações de ataques passam despercebidos e novos ataques não constumam constar no banco de dados. Esse mecanismo de detecção exige constantes atualizações para evitar esse casos.

Outro método de detecção é por anomalias na rede, esse mecanismo costuma manter modelos de funcionamento do sistema em condições normais, como condições do tráfego na rede e da performace do sistema. Esses modelos feitos em momentos rotineiros guardam padrões de como o sistema funciona livre de ataques, o sistema, então, é comparado periódicamente com esses modelos para a detecção de uma possível anomalia. Esse método permite a detecção de novos ataques mas possue alguns casos de falsos positivos. 

A detecção por anomalia faz a comparação do sistema com os modelos rotineiros e então toma um limiar em consideração, pois um leve desvio dos modelos é plausível e não indica necessariamente um ataque. A escolha desse limiar pode influenciar em maior número de falsos positivos ou alguns ataques passarem despercebidos. Uma outra decisão da detecção por anomalias é como o modelo de comparação será criado. Esse modelo pode ser estático, gerado em momentos escolhidos e focados na corretude dos protocolos, ou evolutivo, sendo modificado e aprendendo conforme o comportamento do sistema evolue ~\cite{taxonomy}. Esses modelos estáticos são vulneráveis a ataques sofisticados que abusam corretamente dos protocolos, já os evolutivos são atualizados constantemente, sendo alvos de ataques com aumento gradual de fluxo, nos quais a criação de novos modelos é alterada e a detecção falha.

A última maneira de detecção é o uso de mecanismos externos, nesse caso a detecção não é realizada pela vítima e sim por outros agentes, o agente detecta o ataque e notifica a vítima com detalhes do ataque.

\subsection{Estratégias de resposta ao ataque}

Responder a um ataque de DDoS é necessário devido a falhas  nas estratégias preventivas e quando defesas reativas já detectaram o ataque. A idéia de responder ao ataque é evitar a negação de serviço, aliviando o impacto do ataque e garantindo que usuários legítimos continuem usando dos recursos com danos mínimos.

Uma das possíveis reações esperadas é achar o atacante ou quais máquinas estão sendo usadas durante o ataque, para assim adotar novas ações. Geralmente são usados mecanismos de \emph{traceback} para isso\footnote{Como o protocolo IP não exige autenticação de origem dos pacotes ( como no \emph{ipspoofing}), mecanismos de \emph{traceback} usam de outros métodos para descobrir o endereço real de um pacote ou um fluxo de pacotes.}.

Quando um fluxo de pacotes é suspeito mas não está bem caracterizado como um ataque, uma das soluções é limitar a banda. Limitar a banda de certos pacotes diminue o impacto geral na vítima, e em caso de falsos positivos ainda deixa o usuário legítimo ter acesso a seus recursos, mesmo que limitado. A desvantagem desse método está em permitir que algum fluxo malicioso passe, dessa forma ataques de larga escala ainda podem ser efetivos.

Uma outra opção é a filtragem. Ao se detectar um fluxo de dados malicioso pode-se filtrar totalmente o fluxo mal-intencionado, essa solução evita completamente alguns tipos de ataque, mas em caso de falsos positivos usuários legítimos sofrem negação de serviço pelo próprio sistema.

A última estratégia aqui apresentada é mais drástica e consiste de reconfigurar a rede da vítima ou de uma rede intermediária. Em caso de ataques pode-se alterar a topologia da rede (mudando a configuração de nós, tabelas de roteamentos e etc..) para se isolar o atacante. Essa solução é dispendiosa e também pode auto-infligir negação de serviço no caso de falsos positivos~\cite{taxonomy}.

\subsection{Implantação do mecanismo de defesa}

Uma última consideração a ser ponderada é o local da implantação do sistema de defesa. Grande maioria das soluções são sempre colocadas na rede da vítima, pois a mesma é quem sofre o ataque e por isso é a mais motivada em ter uma boa segurança e arcar com seus custos. 

Outro bom local, mas meio raro, é o uso de uma rede intermediária. Essa rede, que geralmente não está sobrecarregada, se torna a responsável por defender a rede vítima do ataque, o que implica na necessidade de alguma relação ou cooperação entre as duas redes. Esse tipo de defesa é raro e muitas vezes só se torna eficiente com alta adesão na internet, o que não pode ser garantido.

A rede de origem do ataque também é um lugar viável de implantação, principalmente para defesas preventidas. O objetivo da implantação nesse local é evitar que uma máquina  local seja infectada ou tente infectar outras, assim evitando a criação de um \lq{}exército\rq{} e consequentemente, evitando o ataque. Essa solução entretanto é pouco usada pois necessita de alta adesão na internet e há pouca motivação para sua adoção.       




















